package net.zjitc.dao;

import net.zjitc.utils.db.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Struct;

/**
 * Created by Administrator on 2017/12/13.
 */
public class TransationTest {
    //事务操作数据库
    public static void main(String[] args) {
        /*
        * 1.获得数据库的连接
        * 2.关闭此连接对数据库进行操作
        * 3.关闭连接
        * */
        //获得数据库的连接，通过数据库连接池获得连接
        Connection conn=null;
        QueryRunner runner=new QueryRunner();
        try {
            conn= C3P0Utils.getConnection();//从开启事务到执行sql语句到回滚和关闭连接，所使用的是同一个连接对象conn
            //DBUtils工具操作
            conn.setAutoCommit(false);//设置成手动提交
            conn.setSavepoint();
            String sql1="UPDATE account SET money=money-100 WHERE uname='a'";
            String sql2="UPDATE account SET money=money+100 WHERE uname='b'";
            runner.update(conn,sql1);

            int count=runner.update(conn,sql2);//判断除第一条以外的数据更新是否成功
            if (count==0){
                conn.rollback();//不成功则回滚
            }

            conn.commit();//手动提交
            conn.close();//关闭连接

        } catch (SQLException e) {
            try {
                conn.rollback();//回滚:回滚到事务开启的位置
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }

    }
}




















